Crate scoped_trace
source ·Expand description
Capture scoped backtraces.
Use Trace::root
to define the upper unwinding bound of an execution
trace, and Trace::leaf
to define its lower bounds (the points at which
backtraces are collected). The resulting traces are trees, since a single
invocation of Trace::root
may have multiple sub-invocations of
Trace::leaf
.
For example, running this program:
use scoped_trace::Trace;
fn main() {
let (_, trace) = Trace::root(|| foo());
println!("{trace}");
}
fn foo() {
bar();
baz();
}
fn bar() {
Trace::leaf();
}
fn baz() {
Trace::leaf();
}
…will produce an output like:
╼ inlining::main::{{closure}} at example.rs:4:38
├╼ inlining::foo at example.rs:9:5
│ └╼ inlining::bar at example.rs:14:5
└╼ inlining::foo at example.rs:10:5
└╼ inlining::baz at example.rs:18:5
Structs
- An execution trace.